import org.junit.Assert;
import org.junit.Test;

public class SudokuTest 
{
	final int[][] fullField = new int[][] { { 5, 3, 4, 6, 7, 8, 9, 1, 2 },
			{ 6, 7, 2, 1, 9, 5, 3, 4, 8 }, { 1, 9, 8, 3, 4, 2, 5, 6, 7 },
			{ 8, 5, 9, 7, 6, 1, 4, 2, 3 }, { 4, 2, 6, 8, 5, 3, 7, 9, 1 },
			{ 7, 1, 3, 9, 2, 4, 8, 5, 6 }, { 9, 6, 1, 5, 3, 7, 2, 8, 4 },
			{ 2, 8, 7, 4, 1, 9, 6, 3, 5 }, { 3, 4, 5, 2, 8, 6, 1, 7, 9 } };

	final int[][] brokenField = new int[][] { { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
			{ 6, 7, 2, 1, 9, 5, 3, 4, 8 }, { 1, 9, 8, 3, 4, 2, 5, 6, 7 },
			{ 8, 5, 9, 7, 6, 1, 4, 2, 3 }, { 4, 2, 6, 8, 5, 3, 7, 9, 1 },
			{ 7, 1, 3, 9, 2, 4, 8, 5, 6 }, { 9, 6, 1, 5, 3, 7, 2, 8, 4 },
			{ 2, 8, 7, 4, 1, 9, 6, 3, 5 }, { 3, 4, 5, 2, 8, 6, 1, 7, 9 } };

	final int[][] emptyField = new int[][] { { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
			{ 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
			{ 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
			{ 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
			{ 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0 } };

	final int[][] free_1 = new int[][] { { 1, 0, 0, 0, 0, 0, 0, 0, 0 },
			{ 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
			{ 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
			{ 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
			{ 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0 } };
	
	final int[][] free_12 = new int[][] { { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
			{ 8, 6, 4, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
			{ 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
			{ 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
			{ 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0 } };
	
	
	
	@Test
	public void reject_field()	
	{
		try
		{
			Sudoku sudoku = new Sudoku();
			Assert.assertEquals(sudoku.reject(fullField),false);
			Assert.assertEquals(sudoku.reject(emptyField),false);			
			Assert.assertEquals(sudoku.reject(brokenField),true);
		}
		catch (AssertionError e) {
			throw e;
		}
	}
	
	@Test
	public void get_next_free_field()
	{		
		try
		{
			Sudoku sudoku = new Sudoku();
			Assert.assertEquals(sudoku.getNextFreeField(free_1),1);
			Assert.assertEquals(sudoku.getNextFreeField(free_12),12);
			System.out.println("Bazinga!");
		}
		catch (AssertionError e) {
			throw e;
		}
	}
	
	@Test
	public void get_next_Extension()
	{		
		try
		{
			Sudoku sudoku = new Sudoku();
			sudoku.getNextExtension(emptyField, 0);
			//Assert.assertEquals(sudoku.getNextExtension(emptyField, 0).equals(free_1),true);
			//Assert.assertEquals(sudoku.getNextFreeField(emptyField),12);
			System.out.println("Bazinga!");
		}
		catch (AssertionError e) {
			throw e;
		}
	}
}
